package arbitrage;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Scanner;
import java.util.regex.Pattern;

public class Confrontation {

	private String nom1, nom2;
   // Ces 2 champs servent à stocker les lignes de programmes
	private MotMemoire[] prog1, prog2;
	private int victoire1, victoire2, egalite;
	private AsmReader reader;

	// Nombre de match dans un affrontement
	final static int NBMATCH = 40;

	public Confrontation(String nom1, String nom2) {
		this.nom1 = nom1 + ".asm";
		this.nom2 = nom2 + ".asm";
		reader = new AsmReader();
		prog1 = new MotMemoire[VirtualMachine.MAXPROGLENGTH];
		prog2 = new MotMemoire[VirtualMachine.MAXPROGLENGTH];
		victoire1 = 0;
		victoire2 = 0;
		egalite = 0;
	}
  
  // Lancer l'AsmReader pour charger les programmes
	public void set() throws FileNotFoundException, ProgramLengthException, InstructionException, ModeException {
		reader.parse(nom1);
		prog1 = reader.getProg();

		reader.clear();
		reader.parse(nom2);
		prog2 = reader.getProg();
	}    
  
  // Afficher les étiquettes utilisées dans les 2 programmes
	public void printLabels() throws FileNotFoundException, ProgramLengthException, InstructionException, ModeException {
		reader.parse(nom1);
		HashMap<String,Integer> eti1 = reader.getEtiquettes();

		reader.clear();
		reader.parse(nom2);
		HashMap<String,Integer> eti2 = reader.getEtiquettes();

		for (String s : eti1.keySet()) {System.out.println(s + ": " + eti1.get(s));}
		System.out.println();
		for (String s : eti2.keySet()) {System.out.println(s + ": " + eti2.get(s));}
	}

  // Afficher les programmes acquis
	public void printPrograms() {
		for (int i=0; i<VirtualMachine.MAXPROGLENGTH; i++) {prog1[i].print();}
		System.out.println("---");
		for (int i=0; i<VirtualMachine.MAXPROGLENGTH; i++) {prog2[i].print();}
	}
  
   // Faire jouer 40 matchs
	public void play() {
		for (int i=1; i<=NBMATCH; i++) {
			Match m = new Match(i);
			m.set(prog1, prog2);
			m.playAll();
			if (m.resultat()==1) {victoire1++;}
			else if (m.resultat()==2) {victoire2++;}
			else {egalite++;}
		}
	}

	public int victoire1() {return victoire1;}

	public int victoire2() {return victoire2;}

	public int egalite() {return egalite;}

}